/***************************************************
 * 此文件的版权归属xxxx公司所有，未经允许，请勿复制
 */
package com.pxxy.cels.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/************************************************
 * @author yejf
 * @since JDK7.0
 * @CreateDate 2020年4月9日 上午10:12:51
 * @description 此类用来描述了用来获取用户从键盘的输入
 *
 */
public class InputUtil {
	
	public static final String FORMAT_REGEX_0_3="^[0-3]";
    public static final String FORMAT_REGEX_0_2="^[0-2]";
    public static final String FORMAT_REGEX_A_Z="^[a-zA-Z]";
    public static final String FORMAT_REGEX_Q="^[qQ]";
    public static final String FORMAT_REGEX_YN="^[ynYN]";
    public static final String FORMAT_REGEX_NUMBER="^[0-9]*$";
    public static final String FORMAT_REGEX_NUM_5_55="^[5-9]$|^[12]\\d$|^5[0-5]$";
    public static final String FORMAT_REGEX_CN_Q="^[\\u4e00-\\u9fa5]{0,}$|^[qQ]";
    public static final String FORMAT_REGEX_EN_Q="^[a-zA-Z]+$|^[qQ]";

	private static BufferedReader br;

	static {
		br = new BufferedReader(new InputStreamReader(System.in));
	}
	
	public static boolean letterInput(String regex,String c) {
        String pattern = regex;//判断输入的 是不是 0 1 2 3//判断输入的是不是  A-Z
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(String.valueOf(c));
        return m.matches();
    }

	/*****
	 * 从键盘获取用户的输入
	 * 
	 * @param tip
	 * @return
	 */
	public static int getInt(String tip,Object... args) {
		// 提示
		System.out.printf(tip,args);
		String line = null;
		try {
			// 读取
			line = br.readLine(); // 阻塞
			if (line != null && line.trim().length() > 0) {
				// 解析成整数
				try {
					// 返回
					return Integer.parseInt(line.trim());
				} catch (NumberFormatException e) {
					System.out.println("警告：输入的不是数字");
					return getInt(tip,args);
				}
			} else {
				System.out.println("警告：输入的是空白字符");
				return getInt(tip,args);
			}
		} catch (IOException e) {
			// 出错了，重新让用户输入
			System.out.println("IO错误!");
			return getInt(tip,args);
		}
	}

	/******
	 * 让用户从键盘输入单一字符
	 * 
	 * @param tip
	 * @return
	 */
	public static char getChar(String tip,Object... args) {
		// 提示
		System.out.printf(tip, args);
		String line = null;
		try {
			// 读取
			line = br.readLine(); // 阻塞
			if (line != null && line.trim().length() > 0) {
				// 取出它的第一个字符
				char first = line.trim().charAt(0);
				// 判断
				if (Character.isLetter(first)) {
					return first;
				} else {
					//
					System.out.println("警告：输入不是字母");
					return getChar(tip,args);
				}
			} else {
				System.out.println("警告：输入的是空白字符");
				return getChar(tip,args);
			}
		} catch (IOException e) {
			// 出错了，重新让用户输入
			System.out.println("IO错误!");
			return getChar(tip,args);
		}
	}

	public static String getString(String tip, Object... args) {
		// 提示
		System.out.printf(tip, args);
		String line = null;
		try {
			// 读取
			line = br.readLine(); // 阻塞
			if (line != null && line.trim().length() > 0) {
				// 取出它的第一个字符
				return line.trim();
			} else {
				System.out.println("警告：输入的是空白字符");
				return getString(tip,args);
			}
		} catch (IOException e) {
			// 出错了，重新让用户输入
			System.out.println("IO错误!");
			return getString(tip, args);
		}
	}

	public static void main(String[] args) {
		System.out.println(getInt("请输入整数>"));

		System.out.println(getChar("请输入字符>"));
		
		System.out.println(getString("请输入字符串: %s", "jack"));
	}
}
